import axios from 'axios'
import router from "../router/index";
import {Message} from 'element-ui';

axios.defaults.timeout = 5000;  // 请求超时
axios.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=UTF-8';
// axios.defaults.withCredentials = true; // 允许跨域携带cookie




//添加请求拦截器
axios.interceptors.request.use(function (config){
    let token = localStorage.getItem('token')
    if(!isEmpty(token)){
        config.headers['Authorization'] = token;
    }
    return config;
},function (error){
    console.log(error,'请求参数123')

    return Promise.reject(error);
});

//添加响应拦截器
axios.interceptors.response.use(function (res) {
    if(res.status != 200){
        Message({
            message: res.statusText,
            type: 'error',
            duration: 5 * 1000
        })

    }
    // 如果出现401 代表服务端中间件拦截需要重新登录
    if(res.data.code == 401){
        localStorage.removeItem('token');
        localStorage.removeItem('username');
        router.push('/login')
    }
    return res;
},function (err) {
    // 如果地址无法请求
    if (isEmpty(err.response)) {
        Message({
            message: '"网络异常，请检查！',
            type: 'error',
            duration: 5 * 1000
        })
    }
    return Promise.reject(err);
})

/*判断是否为空*/
export function isEmpty(str){
    if(str === '' || str === null || str === undefined){
        return true;
    }
    return false;
}

/**
 * 常见的配置项
 * 1、请求地址
 * url:'/user'
 * 2、请求类型
 * method:get/post
 * 3、请求路径
 * baseURL:'http://www.mt.com/api'
 * 4、请求前的数据处理
 * transformRequest:[funtion(data)]{}
 * 5、请求后的数据处理
 * transformResphonse:[funtion(data){}]
 * 6、自定义的请求头
 * headers:{'Content-Type':'pplication/x-www-form-urlencoded;charset=UTF-8'}
 * 7、URL查询对象(请求参数)
 * params:{id:2}
 * 8、查询对象序列化函数
 * paramsSerializer:funtion(params){}
 * 9、request body (请求体)
 * data:{key:'aa'}
 * 10、超时设置
 * axios.defaults.timeout=5000
 * 11、跨域是否带Token
 * axios.defaults.withCredentials = true; // 允许跨域携带cookie
 * 12、自定义请求处理
 * adapter:funtion(resolve,reject,config){}
 * 13、身份验证信息
 * auth:{uname:'',pwd:12'}
 * 14、响应的数据格式：
 * json/blob/document/arraybuffer/text/stream
 * /

/**
 * get方法，对应get请求
 * @param {String} url [请求的url地址]
 */
export function get(url,params) {
    return new Promise((resolve, reject) => {
        axios.get(url, {
            params: params
        })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}

export function put(url, data) {
    return new Promise((resolve, reject) => {
        axios.put(url, data)
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}

export function patch(url, data) {
    return new Promise((resolve, reject) => {
        axios.patch(url, data)
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}

export function deletes(url, params) {
    return new Promise((resolve, reject) => {
        axios.delete(url, {
            params: params
        })
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}

/**
 * post方法，对应post请求
 * @param {String} url [请求的url地址]
 * @param {Object} params [请求时携带的参数]
 */
export function post(url, data) {
    return new Promise((resolve, reject) => {
        axios.post(url, data)
            .then(res => {
                resolve(res.data);
            })
            .catch(err => {
                reject(err.data)
            })
    });
}

